<template>
  <div class="container_wrapper">
    <div id="container" class="icon"></div>
  </div>
</template>


<script>
export default {
  props: ["hotelList"],
  data() {
    return {
      zIndex: 100, // 海量点图层叠加的顺序
      map: null, //高德地图
      cityName: this.$route.query.cityName,
    };
  },
  watch: {
    hotelList() {
      this.showDot();
      console.log(this.hotelList);
    },
  },
  mounted() {
    console.log(111);
    // 高德地图
    // 优化判断，如果已经存在地图，就不再生成，否则创建一个
    if (!window.AMap) {
      window.onLoad = () => {
        this.mapInit();
        this.showDot();
      };
      // api 地址
      var url =
        "https://webapi.amap.com/maps?v=1.4.15&key=93931147e105d92dbe0c2d9486668381&callback=onLoad";
      // 创建一个 script dom 元素
      var jsapi = document.createElement("script");
      // 设定 script 标签属性
      jsapi.charset = "utf-8";
      jsapi.src = url;
      // 将api文件引入到页面中, 加载完毕以后就会调用回调函数 onLoad
      document.head.appendChild(jsapi);
    } else {
      this.mapInit();
      this.showDot();
    }
  },
  methods: {
    // 封装显示标点
    showDot() {
      // 创建显示标点
      // 先判断是否存在地图
      if (this.map && this.hotelList) {
        this.map.clearMap();
        const markers = this.hotelList.map((v, index) => {
          const position = new AMap.LngLat(
            v.location.longitude,
            v.location.latitude
          );
          var marker = new AMap.Marker({
            content: `<div class='icon'>${index + 1}</div>`,
            position,
            title: v.name,
            zIndex: 100 - index,
          });
          marker.on("click", () => {
            marker.setzIndex(this.zIndex);
            this.zIndex++;
          });
          return marker;
        });
        // 将创建的点标记添加到已有的地图实例：
        this.map.add(markers);
        // this.map.add([]);
        // 自动适配到对应当前标记集的位置
        this.map.setFitView();
      }
    },

    // 地图初始化
    mapInit() {
      this.map = new AMap.Map("container", {
        zoom: 13,
      });

      if (!this.cityName) {
        // 定位，使用IP定位方法
        AMap.plugin("AMap.CitySearch", () => {
          var citySearch = new AMap.CitySearch();
          citySearch.getLocalCity((status, result) => {
            if (status === "complete" && result.info === "OK") {
              this.$router.push({ path: `/hotel?cityName=${result.city}` });
              this.$message.success("定位当前城市：" + result.city);
            }
          });
        });
      }
    },
  },
};
</script>


<style lang="less" scoped>
.container_wrapper {
  width: 410px;
  height: 260px;
}
#container {
  width: 100%;
  height: 100%;
  /deep/ .icon {
    width: 22px;
    height: 36px;
    text-align: center;
    background: url(https://webapi.amap.com/theme/v1.3/markers/n/mark_bs.png);
    background-size: 22px 36px;
    color: #fff;
  }
}
</style>